using System;
using System.Data;
using Csla;
using Csla.Data;
using Microsoft.Practices.ServiceLocation;
using Utpl.Syllabus.Reconocimiento.BL;
using Utpl.Syllabus.Reconocimiento.DAL;
using Utpl.Syllabus.Framework.Dal;
using Utpl.Syllabus.Infraestructure.DalAdo;

namespace Utpl.Syllabus.Reconocimiento.DalAdo
{
    /// <summary>
    /// Estereotipo: Dao 
    /// Responsabilidad: Persistencia para la entidad : variacion_componente
    /// </summary> 
    public class ReconocimientoSolicitanteDao : GenericDaoBase
    {
        #region Constructor

        /// <summary>
        /// Constructor: Inicializa los nombres de los procedimientos almacenados necesarios 
        /// durante el proceso de CRUD de variacion_componente
        /// </summary>
        /// <param name="db"></param>
        public ReconocimientoSolicitanteDao(IDatabase db)
            : base(ServiceLocator.Current.GetInstance<IDatabase>(Constantes.CONEXION_SIS_RECONOCIMIENTO))
        {
            InsertSession = false;
            
            RegisterQuery<ReconocimientoSolicitanteCmd>(Constantes.PRC_VERIFICA_SOLICITUD_REC);
        }

        #endregion

        #region Criteria

        
        /// <summary>
        /// Reperesenta los criterios de busqueda
        /// </summary>
        /// <param name="criteria">Id del programa academico del sistema anterior</param>
        /// <param name="comando">Representa el comando a ejecutar en la Base de Datos</param>
        protected void AddCriteriaParameters(ReconocimientoSolicitanteCmd criteria, IDbCommand comando)
        {
            _db.AddParameterWithValue(comando, "en_ent_id", criteria.PersonaId);
            _db.AddParameter(comando, "sn_resultado", DbType.Int32, ParameterDirection.Output);
        }
        
        #endregion

        #region Entidad
        /// <summary>
        ///  Setea las propiedades  de nuestro objeto de negocio ReconocimientoSolicitanteCmd con los valores obtenidos de la DB        
        /// </summary>
        /// <param name="comando">Almacena los datos provenientes de la Base de Datos</param>
        /// <param name="criteria">Objeto ReconocimientoSolicitanteCmd</param>
        private void LoadFields(IDbCommand comando, ReconocimientoSolicitanteCmd criteria)
        {
            int cantidad;
            Int32.TryParse(_db.GetOutputParameterValue(comando, "sn_resultado").ToString(), out cantidad);
            criteria._result = cantidad > 0;
        }
        #endregion
    }
}